package es.ucm.fdi.pe.practica2.genetico2.mutacion;

import java.util.ArrayList;

import es.ucm.fdi.pe.practica2.genetico2.Alumno;
import es.ucm.fdi.pe.practica2.genetico2.CromosomaAlumnos;

public class MutacionInversion {

	
	void mutar(CromosomaAlumnos c){
		ArrayList<Alumno> lista=c.getGruposAlumnos();
		int p1 = (int) (Math.random()* (c.getN())+1);
		int p2 = (int) (Math.random()* (c.getN())+1);
		
		if(p1>p2){
			int aux=p1;
			p1=p2;
			p2=aux;
		}
		
		while (p1==p2 ||p1==0||p2>=c.getN()){
			p1 = (int) (Math.random()* (c.getN())+1);
			p2 = (int) (Math.random()* (c.getN())+1);
		}
 		
		//System.out.println("Puntos de corte p1:"+p1+" p2:"+p2);
		for(int i=0;i<(int)((p2-p1+1)/2);i++)
			intercambiaGenes(lista,p1+i,p2-i);
	}

	private void intercambiaGenes(ArrayList<Alumno> lista, int p1, int p2) {
		Alumno a=lista.get(p1);
		lista.set(p1, lista.get(p2));
		lista.set(p2, a);		
	}
	public static void main(String args[]) throws Exception{
		Alumno a1 = new Alumno(101, 8.75); //Alumno normal 1
		a1.addExcluido(102);
		a1.addExcluido(103);
		a1.addExcluido(104);
	//	System.out.println(a1.toString());
		
		Alumno a2 = new Alumno(201, 5.75); //Alumno normal 2
		a2.addExcluido(202);
		a2.addExcluido(203);
		a2.addExcluido(204);
	//	System.out.println(a2.toString());
		
		Alumno a3 = new Alumno(301, 9.75); //Alumno normal 3
		a3.addExcluido(302);
		a3.addExcluido(303);
		a3.addExcluido(304);
	//	System.out.println(a3.toString());
		
		Alumno a4 = new Alumno(401, 6.75); //Alumno normal 4
		a4.addExcluido(402);
		a4.addExcluido(403);
		a4.addExcluido(404);
	//	System.out.println(a4.toString());
		
		Alumno a5 = new Alumno(501, 2.75); //Alumno normal 5
		a5.addExcluido(502);
		a5.addExcluido(503);
		a5.addExcluido(504);
	//	System.out.println(a5.toString());
		
	//Alumno a6 = new Alumno(601, 3.75); //Alumno normal 6
	//	a6.addExcluido(602);
	//	a6.addExcluido(603);
	//	a6.addExcluido(604);
	//	System.out.println(a6.toString());
		
		ArrayList<Alumno> lista= new ArrayList<Alumno>();
		lista.add(a1);
		lista.add(a2);
		lista.add(a3);
		lista.add(a4);
		lista.add(a5);
	//	lista.add(a6);
		for (int i=0;i<4;i++){
			System.out.println("Vuelta "+(i+1)+"---------");
			CromosomaAlumnos c1= new CromosomaAlumnos(3, lista);
			System.out.println(c1.toString());
			MutacionInversion m = new MutacionInversion();
			m.mutar(c1);
			System.out.println(c1.toString());
			System.out.println("----------");
		}
	}
}
